/**
 * 发送请求
 * param.url: 开发者服务器接口地址
 * param.data: 请求的参数
 * param.header: 设置请求的 header，header 中不能设置 Referer。
 * param.method: (需大写）有效值：OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
 * param.dataType: 如果设为json，会尝试对返回的数据做一次 JSON.parse
 * param.responseType: 设置响应的数据类型。合法值：text、arraybuffer
 * param.success: 收到开发者服务成功返回的回调函数
 * param.fail: 接口调用失败的回调函数
 * param.complete: 接口调用结束的回调函数（调用成功、失败都会执行）
 * param.hideLoading 是否隐藏loading
 * param.successStatusAbnormal 请求成功但是有异常流程出现的回调
 * 
 * customSiteUrl: 自定义的接口地址
 */
export const sendRequest = (param, customSiteUrl) => {
    let data = param.data || {}
    let header = param.header
    let requestUrl = ''

    if (!data.app_id) {
        data.app_id = this.getAppId()
    }

    if (!this.globalData.notBindXcxAppId) {
        data.session_key = this.getSessionKey()
    }

    if (customSiteUrl) {
        requestUrl = customSiteUrl + param.url
    }else {
        requestUrl = this.globalData.siteBaseUrl + param.url
    }

    if (param.method) {
        if (param.method.toLowerCase() == 'post') {
            data = this.modifyPostParam(data)
            header = header || { 'content-type': 'application/x-www-form-urlencoded' }
        }
        param.method = param.method.toUpperCase()
    }

    if (!param.hideLoading) {
        this.showToast({
            title: '请求中...',
            icon: 'loading'
        })
    }

    wx.request({
        url: requestUrl,
        data: data,
        method: param.method || 'GET',
        header: header || { 'content-type': 'application/json' },
        success: (res) => {
            if (res.statusCode && res.statusCode != 200) {
                // 微信返回错误
                this.hideToast()
                this.showModal({ content: res.errMsg })
                typeof param.successStatusAbnormal == 'function' && param.successStatusAbnormal(res.data)
                return false
            }
            // 此处还需要判断是否登录，就是对接项目的状态
            typeof param.success == 'function' && param.success(res.data)
        },
        fail: (res) => {
            this.hideToast()
            this.showModal({ content: '请求失败 ' + res.errMsg })
        },
        complete: (res) => {
            param.hideLoading || this.hideToast()
            typeof param.complete == 'function' && param.complete(res.data)
        }
    })

}


/**
 * post请求参数格式化
 */
export const modifyPostParam = () => {
    let query = '';
    let name, value, fullSubName, subName, subValue, innerObj, i;
    for (name in obj) {
        value = obj[name];
        if (value instanceof Array) {
            for (i = 0; i < value.length; ++i) {
                subValue = value[i];
                fullSubName = name + '[' + i + ']';
                innerObj = {};
                innerObj[fullSubName] = subValue;
                query += this.modifyPostParam(innerObj) + '&';
            }
        } else if (value instanceof Object) {
            for (subName in value) {
                subValue = value[subName];
                fullSubName = name + '[' + subName + ']';
                innerObj = {};
                innerObj[fullSubName] = subValue;
                query += this.modifyPostParam(innerObj) + '&';
            }
        } else if (value !== undefined && value !== null) {
            query += encodeURIComponent(name) + '=' + encodeURIComponent(value) + '&';
        }
    }
    return query.length ? query.substr(0, query.length - 1) : query;
},